// 对axios进行二次封装( 实例化axios对象,设置请求拦截器,设置响应拦截器 )

import axios from 'axios'
 
// 在开发环境下,process.env.REACT_APP_BASE_URL 会自动找 .env.development 文件中的变量
// 在生产环境下, process.env.REACT_APP_BASE_URL 会自动找 .env.production 文件中的变量.

// 开发环境下 代理文件 setupProxy.js 会生效,跨域问题就会通过代理的请求转发解决
// 生产环境下(服务器环境) 代理文件 setupProxy.js 文件不存在了,代理也就不生效了,之后的跨域问题只能让后端在服务器端解决

// 实例化axios对象
var service = axios.create({
    baseURL: process.env.REACT_APP_BASE_URL , // 基准路基
    timeout: 10*1000 // 超时时间
})

// 设置请求拦截器
service.interceptors.request.use(
	(config)=>{
        // 一般情况下,在这里设置请求头( 服务端要求必须携带的 )
        config.headers.Authorization = "Bearer" + " " + localStorage.getItem('token');
        return config;
    },
    
    (err)=>{
        return Promise.reject(err)
    }
)

// 设置响应拦截器
service.interceptors.response.use(
	(res)=>{
        return res
    },
    
    (err)=>{
        // 一般情况下,在这里处理服务端返回的错误码
        if( err.response.status == 401){
            alert('身份验证失败,登录过期,请重新登录');
            // 跳转到登录页
            // 删除过期的token
        }
        else if( err.response.status == 404){
            alert('访问路径有误')
        }
        else if( err.response.status == 500 ){
            alert('服务器内部错误')
        }
        return Promise.reject(err)
    }
)

export default service 